SQUARE_PAR = [300 300 300 5 3.103; 400 400 400 5 4.753; 500 500 500 5 8.109; 600 600 600 5 11.515; 700 700 700 5 17.924; 800 800 800 5 19.771; 900 900 900 5 27.852; 1000 1000 1000 5 35.603;...
 1100 1100 1100 5 42.044; 1200 1200 1200 5 57.687; 1300 1300 1300 5 928.44; 1400 1400 1400 5 90.026; 1500 1500 1500 5 101.097; 1600 1600 1600 5 112.105; 1700 1700 1700 5 148.771; 1800 1800 1800 5 164.365; 1900 1900 1900 5 202.13; 2000 2000 2000 5 217.084;...
 2100 2100 2100 5 278.345; 2200 2200 2200 5 298.496; 2300 2300 2300 5 371.565; 2400 2400 2400 5 363.793; 2500 2500 2500 5 408.382; 2600 2600 2600 5 475.512; 2700 2700 2700 5 508.787; 2800 2800 2800 5 599.151; 2900 2900 2900 5 640.526; 3000 3000 3000 5 724.248;...
 3100 3100 3100 5 790.377; 3200 3200 3200 5 804.486; 3300 3300 3300 5 926.625; 3400 3400 3400 5 994.213; 3500 3500 3500 5 1114.07; 3600 3600 3600 5 1170.9; 3700 3700 3700 5 1294; 3800 3800 3800 5 1367.85; 3900 3900 3900 5 1834.13; 4000 4000 4000 5 1603.95;...
 4100 4100 4100 5 1751.38; 4200 4200 4200 5 1847.32; 4300 4300 4300 5 2074.2; 4400 4400 4400 5 2258.92; 4500 4500 4500 5 2676.47; 4600 4600 4600 5 2459.05; 4700 4700 4700 5 2569.36; 4800 4800 4800 5 2717.69; 4900 4900 4900 5 2949.85; 5000 5000 5000 5 3075.68;...
 5100 5100 5100 5 3323.28; 5200 5200 5200 5 3442.44; 5300 5300 5300 5 3742.76; 5400 5400 5400 5 3892.45; 5500 5500 5500 5 4484.37; 5600 5600 5600 5 4314.93; 5700 5700 5700 5 4544.45; 5800 5800 5800 5 4842.55; 5900 5900 5900 5 5041.9; 6000 6000 6000 5 5544.2;...
 6100 6100 6100 5 5554.46; 6200 6200 6200 5 6484.4; 6300 6300 6300 5 6161.93; 6400 6400 6400 5 6382.29; 6500 6500 6500 5 6776.47; 6600 6600 6600 5 7046.79; 6700 6700 6700 5 7953.23; 6800 6800 6800 5 7644.17; 6900 6900 6900 5 8100.12; 7000 7000 7000 5 8897.1;...
 7100 7100 7100 5 9426.63; 7200 7200 7200 5 9432.19; 7300 7300 7300 5 9584.47; 7400 7400 7400 5 9903.83; 7500 7500 7500 5 10964.9; 7600 7600 7600 5 10945.9; 7700 7700 7700 5 11293.3; 7800 7800 7800 5 12343.6; 7900 7900 7900 5 12280.6; 8000 8000 8000 5 12669.4;];

OUTER_PAR = [300 800 300 5 4.286; 400 800 400 5 6.094; 500 800 500 5 9.289; 600 800 600 5 21.274; 700 800 700 5 16.578; 800 800 800 5 18.025; 900 800 900 5 25.55; 1000 800 1000 5 27.754;...
 1100 800 1100 5 32.764; 1200 800 1200 5 40.121; 1300 800 1300 5 879.761; 1400 800 1400 5 51.52; 1500 800 1500 5 56.118; 1600 800 1600 5 62.29; 1700 800 1700 5 71.03; 1800 800 1800 5 85.159; 1900 800 1900 5 92.25; 2000 800 2000 5 100.508;...
 2100 800 2100 5 108.566; 2200 800 2200 5 121.105; 2300 800 2300 5 132.326; 2400 800 2400 5 138.337; 2500 800 2500 5 140.723; 2600 800 2600 5 155.872; 2700 800 2700 5 171.968; 2800 800 2800 5 190.569; 2900 800 2900 5 202.161; 3000 800 3000 5 205.1;...
 3100 800 3100 5 210.003; 3200 800 3200 5 239.073; 3300 800 3300 5 249.342; 3400 800 3400 5 267.204; 3500 800 3500 5 298.669; 3600 800 3600 5 282.345; 3700 800 3700 5 313.911; 3800 800 3800 5 326.643; 3900 800 3900 5 525.344; 4000 800 4000 5 353.147;...
 4100 800 4100 5 459.889; 4200 800 4200 5 527.456; 4300 800 4300 5 397.354; 4400 800 4400 5 437.424; 4500 800 4500 5 471.166; 4600 800 4600 5 510.789; 4700 800 4700 5 567.432; 4800 800 4800 5 580.359; 4900 800 4900 5 517.139; 5000 800 5000 5 555.79;...
 5100 800 5100 5 564.915; 5200 800 5200 5 586.041; 5300 800 5300 5 602.071; 5400 800 5400 5 618.474; 5500 800 5500 5 646.621; 5600 800 5600 5 670.436; 5700 800 5700 5 704.919; 5800 800 5800 5 718.641; 5900 800 5900 5 768.05; 6000 800 6000 5 790.806;...
 6100 800 6100 5 819.556; 6200 800 6200 5 840.755; 6300 800 6300 5 869.908; 6400 800 6400 5 915.859; 6500 800 6500 5 908.194; 6600 800 6600 5 942.282; 6700 800 6700 5 955.975; 6800 800 6800 5 1014.28; 6900 800 6900 5 1298.17; 7000 800 7000 5 1140.51;...
 7100 800 7100 5 1105.65; 7200 800 7200 5 1139.19; 7300 800 7300 5 1141.75; 7400 800 7400 5 1184.61; 7500 800 7500 5 1227.16; 7600 800 7600 5 1255.39; 7700 800 7700 5 1324.49; 7800 800 7800 5 1287.85; 7900 800 7900 5 1508.02; 8000 800 8000 5 1491.99;];

TSSQUARE_PAR = [300 800 800 5 9.476; 400 800 800 5 11.431; 500 800 800 5 13.653; 600 800 800 5 15.936; 700 800 800 5 18.778; 800 800 800 5 23.083; 900 800 800 5 22.525; 1000 800 800 5 24.661;...
 1100 800 800 5 21.846; 1200 800 800 5 26.464; 1300 800 800 5 27.064; 1400 800 800 5 31.015; 1500 800 800 5 30.965; 1600 800 800 5 28.847; 1700 800 800 5 34.552; 1800 800 800 5 32.683; 1900 800 800 5 38.946; 2000 800 800 5 36.982;...
 2100 800 800 5 43.015; 2200 800 800 5 42.429; 2300 800 800 5 53.722; 2400 800 800 5 46.687; 2500 800 800 5 50.479; 2600 800 800 5 51.885; 2700 800 800 5 49.373; 2800 800 800 5 61.726; 2900 800 800 5 60.008; 3000 800 800 5 60.557;...
 3100 800 800 5 66.905; 3200 800 800 5 58.279; 3300 800 800 5 64.201; 3400 800 800 5 71.729; 3500 800 800 5 68.535; 3600 800 800 5 86.644; 3700 800 800 5 72.415; 3800 800 800 5 80.464; 3900 800 800 5 75.47; 4000 800 800 5 75.201;...
 4100 800 800 5 80.307; 4200 800 800 5 84.855; 4300 800 800 5 81.454; 4400 800 800 5 84.304; 4500 800 800 5 84.717; 4600 800 800 5 102.26; 4700 800 800 5 86.865; 4800 800 800 5 95.051; 4900 800 800 5 100.451; 5000 800 800 5 101.349;...
 5100 800 800 5 101.075; 5200 800 800 5 101.033; 5300 800 800 5 104.582; 5400 800 800 5 97.123; 5500 800 800 5 103.732; 5600 800 800 5 104.138; 5700 800 800 5 111.26; 5800 800 800 5 117.506; 5900 800 800 5 105.608; 6000 800 800 5 111.106;...
 6100 800 800 5 110.842; 6200 800 800 5 114.712; 6300 800 800 5 116.497; 6400 800 800 5 127.055; 6500 800 800 5 129.69; 6600 800 800 5 118.702; 6700 800 800 5 134.794; 6800 800 800 5 143.205; 6900 800 800 5 140.903; 7000 800 800 5 129.026;...
 7100 800 800 5 142.55; 7200 800 800 5 132.272; 7300 800 800 5 138.348; 7400 800 800 5 156.265; 7500 800 800 5 143.274; 7600 800 800 5 151.328; 7700 800 800 5 146; 7800 800 800 5 148.384; 7900 800 800 5 141.919; 8000 800 800 5 143.569;];


SQUARE_SEQ = [50 50 50 5 0.117; 75 75 75 5 0.368; 100 100 100 5 0.609; 125 125 125 5 1.506; 150 150 150 5 2.026; 175 175 175 5 3.1; 200 200 200 5 4.177; 225 225 225 5 6.125; 250 250 250 5 8.577; 275 275 275 5 11.224; 300 300 300 5 13.351; 325 325 325 5 16.944; 350 350 350 5 20.058; 375 375 375 5 25.244; 400 400 400 5 30.255; 425 425 425 5 36.618; 450 450 450 5 44.512; 475 475 475 5 53.218; 500 500 500 5 58.542; 525 525 525 5 67.996; 550 550 550 5 81.326; 575 575 575 5 91.893; 600 600 600 5 102.886; 625 625 625 5 111.035; 650 650 650 5 125.381; 675 675 675 5 139.987; 700 700 700 5 159.457; 725 725 725 5 183.657; 750 750 750 5 193.969; 775 775 775 5 219.133; 800 800 800 5 235.692; 825 825 825 5 264.588; 850 850 850 5 285.901; 875 875 875 5 306.145; 900 900 900 5 331.591; 925 925 925 5 365.481; 950 950 950 5 398.144; 975 975 975 5 440.191; 1000 1000 1000 5 455.34;...
 1025 1025 1025 5 517.035; 1050 1050 1050 5 536.327; 1075 1075 1075 5 589.056; 1100 1100 1100 5 613.79; 1125 1125 1125 5 669.161; 1150 1150 1150 5 718.886; 1175 1175 1175 5 757.265; 1200 1200 1200 5 822.03; 1225 1225 1225 5 855.187; 1250 1250 1250 5 896.84; 1275 1275 1275 5 965.858; 1300 1300 1300 5 1024.17; 1325 1325 1325 5 1084.94; 1350 1350 1350 5 1121.56; 1375 1375 1375 5 1178.84; 1400 1400 1400 5 1247.91; 1425 1425 1425 5 1309.47; 1450 1450 1450 5 1347.9; 1475 1475 1475 5 1438.12; 1500 1500 1500 5 1497.9; 1525 1525 1525 5 1643.89; 1550 1550 1550 5 1676.16; 1575 1575 1575 5 1769.44; 1600 1600 1600 5 1840.29; 1625 1625 1625 5 1895.9; 1650 1650 1650 5 1972.95; 1675 1675 1675 5 2075.25; 1700 1700 1700 5 2166.39; 1725 1725 1725 5 2307.86; 1750 1750 1750 5 2361.41; 1775 1775 1775 5 2480.25; 1800 1800 1800 5 2576.83; 1825 1825 1825 5 2697.67; 1850 1850 1850 5 2777.03; 1875 1875 1875 5 2996.1; 1900 1900 1900 5 3111.67; 1925 1925 1925 5 3216.58; 1950 1950 1950 5 3276.57; 1975 1975 1975 5 3425.95; 2000 2000 2000 5 3552.3;...
 2025 2025 2025 5 3779.9; 2050 2050 2050 5 3901.35; 2075 2075 2075 5 4008.27; 2100 2100 2100 5 4105.16; 2125 2125 2125 5 4255.19; 2150 2150 2150 5 4461; 2175 2175 2175 5 4606.93; 2200 2200 2200 5 4746.91; 2225 2225 2225 5 4880.32; 2250 2250 2250 5 5003.16; 2275 2275 2275 5 5216.16; 2300 2300 2300 5 5503.89; 2325 2325 2325 5 5577.94; 2350 2350 2350 5 5728.9; 2375 2375 2375 5 5950.83; 2400 2400 2400 5 6103.11; 2425 2425 2425 5 6395.9; 2450 2450 2450 5 6506.85; 2475 2475 2475 5 6717.2; 2500 2500 2500 5 6799.55; 2525 2525 2525 5 7101.38; 2550 2550 2550 5 7179.06; 2575 2575 2575 5 7535.26; 2600 2600 2600 5 7758.57; 2625 2625 2625 5 8248.66; 2650 2650 2650 5 8207.17; 2675 2675 2675 5 8673.77; 2700 2700 2700 5 8733.69; 2725 2725 2725 5 9072.46; 2750 2750 2750 5 9203.22; 2775 2775 2775 5 9467.11; 2800 2800 2800 5 9712.33; 2825 2825 2825 5 9844.58; 2850 2850 2850 5 10316.1; 2875 2875 2875 5 10455.1; 2900 2900 2900 5 10663.2; 2925 2925 2925 5 10950.6; 2950 2950 2950 5 11227.7; 2975 2975 2975 5 11774.6; 3000 3000 3000 5 11756.6;];
 
OUTER_SEQ = [50 800 50 5 1.281; 75 800 75 5 2.573; 100 800 100 5 4.623; 125 800 125 5 6.716; 150 800 150 5 9.405; 175 800 175 5 12.635; 200 800 200 5 15.316; 225 800 225 5 19.695; 250 800 250 5 23.113; 275 800 275 5 29.824; 300 800 300 5 35.094; 325 800 325 5 40.246; 350 800 350 5 46.769; 375 800 375 5 55.757; 400 800 400 5 62.931; 425 800 425 5 69.375; 450 800 450 5 76.813; 475 800 475 5 82.425; 500 800 500 5 95.223; 525 800 525 5 109.996; 550 800 550 5 114.622; 575 800 575 5 125.452; 600 800 600 5 131.972; 625 800 625 5 145.59; 650 800 650 5 155.617; 675 800 675 5 171.963; 700 800 700 5 181.645; 725 800 725 5 197.207; 750 800 750 5 216.341; 775 800 775 5 225.277; 800 800 800 5 248.006; 825 800 825 5 257.684; 850 800 850 5 266.187; 875 800 875 5 282.436; 900 800 900 5 308.203; 925 800 925 5 326.503; 950 800 950 5 342.859; 975 800 975 5 364.399; 1000 800 1000 5 365.953;...
 1025 800 1025 5 399.724; 1050 800 1050 5 417.056; 1075 800 1075 5 442.805; 1100 800 1100 5 461.238; 1125 800 1125 5 482.955; 1150 800 1150 5 513.472; 1175 800 1175 5 527.711; 1200 800 1200 5 541.661; 1225 800 1225 5 563.771; 1250 800 1250 5 587.072; 1275 800 1275 5 599.744; 1300 800 1300 5 626.313; 1325 800 1325 5 664.072; 1350 800 1350 5 655.959; 1375 800 1375 5 692.991; 1400 800 1400 5 728.854; 1425 800 1425 5 744.099; 1450 800 1450 5 767.428; 1475 800 1475 5 794.899; 1500 800 1500 5 817.507; 1525 800 1525 5 873.103; 1550 800 1550 5 857.446; 1575 800 1575 5 915.037; 1600 800 1600 5 940.325; 1625 800 1625 5 981.466; 1650 800 1650 5 980.714; 1675 800 1675 5 1030.54; 1700 800 1700 5 1048.31; 1725 800 1725 5 1131.61; 1750 800 1750 5 1111.46; 1775 800 1775 5 1161.82; 1800 800 1800 5 1170.11; 1825 800 1825 5 1203.26; 1850 800 1850 5 1237.78; 1875 800 1875 5 1300.93; 1900 800 1900 5 1326.23; 1925 800 1925 5 1371.18; 1950 800 1950 5 1370.38; 1975 800 1975 5 1408.59; 2000 800 2000 5 1467.33;...
 2025 800 2025 5 1484.15; 2050 800 2050 5 1549.57; 2075 800 2075 5 1557.26; 2100 800 2100 5 1590.53; 2125 800 2125 5 1643.38; 2150 800 2150 5 1681.63; 2175 800 2175 5 1741.45; 2200 800 2200 5 1751.95; 2225 800 2225 5 1788.28; 2250 800 2250 5 1826.47; 2275 800 2275 5 1877.63; 2300 800 2300 5 1956.25; 2325 800 2325 5 1957.73; 2350 800 2350 5 2032.89; 2375 800 2375 5 2033.06; 2400 800 2400 5 2047.42; 2425 800 2425 5 2120.32; 2450 800 2450 5 2113.08; 2475 800 2475 5 2195.55; 2500 800 2500 5 2229.48; 2525 800 2525 5 2311.99; 2550 800 2550 5 2289.65; 2575 800 2575 5 2360.02; 2600 800 2600 5 2383.1; 2625 800 2625 5 2495.75; 2650 800 2650 5 2466.14; 2675 800 2675 5 2599.97; 2700 800 2700 5 2582.87; 2725 800 2725 5 2658.69; 2750 800 2750 5 2673.6; 2775 800 2775 5 2737.09; 2800 800 2800 5 2798.05; 2825 800 2825 5 2848.6; 2850 800 2850 5 2954.3; 2875 800 2875 5 2949.68; 2900 800 2900 5 3000.83; 2925 800 2925 5 3052.93; 2950 800 2950 5 3110.74; 2975 800 2975 5 3217.9; 3000 800 3000 5 3199.74;];

TSSQUARE_SEQ = [50 800 800 5 17.334; 75 800 800 5 25.413; 100 800 800 5 31.829; 125 800 800 5 41.069; 150 800 800 5 48.374; 175 800 800 5 55.584; 200 800 800 5 59.579; 225 800 800 5 69.556; 250 800 800 5 78.936; 275 800 800 5 82.974; 300 800 800 5 91.613; 325 800 800 5 95.841; 350 800 800 5 100.615; 375 800 800 5 111.094; 400 800 800 5 114.978; 425 800 800 5 126.056; 450 800 800 5 132.456; 475 800 800 5 142.296; 500 800 800 5 145.409; 525 800 800 5 155.278; 550 800 800 5 159.75; 575 800 800 5 178.435; 600 800 800 5 180.205; 625 800 800 5 190.63; 650 800 800 5 190.084; 675 800 800 5 196.626; 700 800 800 5 201.546; 725 800 800 5 217.861; 750 800 800 5 218.778; 775 800 800 5 227.259; 800 800 800 5 237.308; 825 800 800 5 250.487; 850 800 800 5 251.654; 875 800 800 5 257.296; 900 800 800 5 259.578; 925 800 800 5 276.455; 950 800 800 5 280.455; 975 800 800 5 292.762; 1000 800 800 5 303.141;...
 1025 800 800 5 321.83; 1050 800 800 5 308.345; 1075 800 800 5 338.906; 1100 800 800 5 330.793; 1125 800 800 5 357.45; 1150 800 800 5 373.208; 1175 800 800 5 354.006; 1200 800 800 5 357.252; 1225 800 800 5 374.292; 1250 800 800 5 392.525; 1275 800 800 5 417.75; 1300 800 800 5 395.24; 1325 800 800 5 419.005; 1350 800 800 5 416.404; 1375 800 800 5 441.04; 1400 800 800 5 440.544; 1425 800 800 5 432.857; 1450 800 800 5 424.599; 1475 800 800 5 452.811; 1500 800 800 5 461.694; 1525 800 800 5 464.812; 1550 800 800 5 458.797; 1575 800 800 5 481.018; 1600 800 800 5 497.351; 1625 800 800 5 480.28; 1650 800 800 5 491.589; 1675 800 800 5 505.903; 1700 800 800 5 519.295; 1725 800 800 5 536.468; 1750 800 800 5 520.496; 1775 800 800 5 545.021; 1800 800 800 5 547.714; 1825 800 800 5 558.275; 1850 800 800 5 543.3; 1875 800 800 5 584.036; 1900 800 800 5 573.144; 1925 800 800 5 588.897; 1950 800 800 5 627.745; 1975 800 800 5 647.178; 2000 800 800 5 625.72;...
 2025 800 800 5 628.949; 2050 800 800 5 646.665; 2075 800 800 5 634.998; 2100 800 800 5 644.974; 2125 800 800 5 651.083; 2150 800 800 5 673.296; 2175 800 800 5 671.103; 2200 800 800 5 679.591; 2225 800 800 5 682.688; 2250 800 800 5 685.912; 2275 800 800 5 701.809; 2300 800 800 5 727.952; 2325 800 800 5 710.301; 2350 800 800 5 721.609; 2375 800 800 5 729.688; 2400 800 800 5 732.859; 2425 800 800 5 762.558; 2450 800 800 5 751.497; 2475 800 800 5 766.89; 2500 800 800 5 760.707; 2525 800 800 5 778.367; 2550 800 800 5 782.348; 2575 800 800 5 793.474; 2600 800 800 5 795.632; 2625 800 800 5 806.049; 2650 800 800 5 801.197; 2675 800 800 5 844.113; 2700 800 800 5 817.576; 2725 800 800 5 843.511; 2750 800 800 5 833.803; 2775 800 800 5 851.397; 2800 800 800 5 854.084; 2825 800 800 5 860.294; 2850 800 800 5 891.789; 2875 800 800 5 878.038; 2900 800 800 5 892.876; 2925 800 800 5 902.067; 2950 800 800 5 904.16; 2975 800 800 5 935.083; 3000 800 800 5 971.246;];

dims_par = SQUARE_PAR(:, 1);
lw = 2;      % LineWidth
msz = 6;     % MarkerSize

close all;
width = 5; height = 3;

make_plot_pre(width, height);

plot(dims_par, perf(TSSQUARE_PAR) * 5 / 24, 'bs--', ...
     dims_par, perf(OUTER_PAR) * 5 / 24, 'ro--', ...
     dims_par, perf(SQUARE_PAR) * 5 / 24, 'g>--', ...
     'LineWidth', lw, 'MarkerSize', msz);
 
 xlabel('Dimension (N)'); ylabel('GFLOPS / core');
 title('Parallel dgemm performance (24 cores)');
 %legend('N x 800 x 800', 'N x 800 x N', 'N x N x N', 'Location', 'SouthEast');
 ylim([5 25]);  
make_plot_post(width, height);

print('fast-matmul_paper_figs/dgemm_curves_par_nodynamic','-depsc','-r300');


make_plot_pre(width, height);
dims_seq = SQUARE_SEQ(:, 1);

plot(dims_seq, perf(TSSQUARE_SEQ) * 5, 'bs--', ...
     dims_seq, perf(OUTER_SEQ) * 5, 'ro--', ...
     dims_seq, perf(SQUARE_SEQ) * 5, 'g>--', ...
     'LineWidth', lw, 'MarkerSize', msz);
 
 xlabel('Dimension (N)'); ylabel('GFLOPS');
 title('Sequential dgemm performance');
 legend('N x 800 x 800', 'N x 800 x N', 'N x N x N', 'Location', 'SouthEast');
  ylim([5 25]);
 make_plot_post(width, height);


print('fast-matmul_paper_figs/dgemm_curves_seq','-depsc','-r300');